window.pdocSearch = (function(){
/** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u<s.length;u++){var a=s[u];r[a]=this.pipeline.run(t.tokenizer(e[a]))}var l={};for(var c in o){var d=r[c]||r.any;if(d){var f=this.fieldSearch(d,c,o),h=o[c].boost;for(var p in f)f[p]=f[p]*h;for(var p in f)p in l?l[p]+=f[p]:l[p]=f[p]}}var v,g=[];for(var p in l)v={ref:p,score:l[p]},this.documentStore.hasDoc(p)&&(v.doc=this.documentStore.getDoc(p)),g.push(v);return g.sort(function(e,t){return t.score-e.score}),g},t.Index.prototype.fieldSearch=function(e,t,n){var i=n[t].bool,o=n[t].expand,r=n[t].boost,s=null,u={};return 0!==r?(e.forEach(function(e){var n=[e];1==o&&(n=this.index[t].expandToken(e));var r={};n.forEach(function(n){var o=this.index[t].getDocs(n),a=this.idf(n,t);if(s&&"AND"==i){var l={};for(var c in s)c in o&&(l[c]=o[c]);o=l}n==e&&this.fieldSearchStats(u,n,o);for(var c in o){var d=this.index[t].getTermFrequency(n,c),f=this.documentStore.getFieldLength(c,t),h=1;0!=f&&(h=1/Math.sqrt(f));var p=1;n!=e&&(p=.15*(1-(n.length-e.length)/n.length));var v=d*a*h*p;c in r?r[c]+=v:r[c]=v}},this),s=this.mergeScores(s,r,i)},this),s=this.coordNorm(s,u,e.length)):void 0},t.Index.prototype.mergeScores=function(e,t,n){if(!e)return t;if("AND"==n){var i={};for(var o in t)o in e&&(i[o]=e[o]+t[o]);return i}for(var o in t)o in e?e[o]+=t[o]:e[o]=t[o];return e},t.Index.prototype.fieldSearchStats=function(e,t,n){for(var i in n)i in e?e[i].push(t):e[i]=[t]},t.Index.prototype.coordNorm=function(e,t,n){for(var i in e)if(i in t){var o=t[i].length;e[i]=e[i]*o/n}return e},t.Index.prototype.toJSON=function(){var e={};return this._fields.forEach(function(t){e[t]=this.index[t].toJSON()},this),{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),index:e,pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},t.DocumentStore=function(e){this._save=null===e||void 0===e?!0:e,this.docs={},this.docInfo={},this.length=0},t.DocumentStore.load=function(e){var t=new this;return t.length=e.length,t.docs=e.docs,t.docInfo=e.docInfo,t._save=e.save,t},t.DocumentStore.prototype.isDocStored=function(){return this._save},t.DocumentStore.prototype.addDoc=function(t,n){this.hasDoc(t)||this.length++,this.docs[t]=this._save===!0?e(n):null},t.DocumentStore.prototype.getDoc=function(e){return this.hasDoc(e)===!1?null:this.docs[e]},t.DocumentStore.prototype.hasDoc=function(e){return e in this.docs},t.DocumentStore.prototype.removeDoc=function(e){this.hasDoc(e)&&(delete this.docs[e],delete this.docInfo[e],this.length--)},t.DocumentStore.prototype.addFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&(this.docInfo[e]||(this.docInfo[e]={}),this.docInfo[e][t]=n)},t.DocumentStore.prototype.updateFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&this.addFieldLength(e,t,n)},t.DocumentStore.prototype.getFieldLength=function(e,t){return null===e||void 0===e?0:e in this.docs&&t in this.docInfo[e]?this.docInfo[e][t]:0},t.DocumentStore.prototype.toJSON=function(){return{docs:this.docs,docInfo:this.docInfo,length:this.length,save:this._save}},t.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},t={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,u="^("+o+")?"+r+o+"("+r+")?$",a="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i,c=new RegExp(s),d=new RegExp(a),f=new RegExp(u),h=new RegExp(l),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,x=new RegExp("([^aeiouylsz])\\1$"),w=new RegExp("^"+o+i+"[^aeiouwxy]$"),I=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,D=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,_=/^(.+?)e$/,P=/ll$/,k=new RegExp("^"+o+i+"[^aeiouwxy]$"),z=function(n){var i,o,r,s,u,a,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,u=v,s.test(n)?n=n.replace(s,"$1$2"):u.test(n)&&(n=n.replace(u,"$1$2")),s=g,u=m,s.test(n)){var z=s.exec(n);s=c,s.test(z[1])&&(s=y,n=n.replace(s,""))}else if(u.test(n)){var z=u.exec(n);i=z[1],u=h,u.test(i)&&(n=i,u=S,a=x,l=w,u.test(n)?n+="e":a.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=I,s.test(n)){var z=s.exec(n);i=z[1],n=i+"i"}if(s=b,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=c,s.test(i)&&(n=i+e[o])}if(s=E,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=c,s.test(i)&&(n=i+t[o])}if(s=D,u=F,s.test(n)){var z=s.exec(n);i=z[1],s=d,s.test(i)&&(n=i)}else if(u.test(n)){var z=u.exec(n);i=z[1]+z[2],u=d,u.test(i)&&(n=i)}if(s=_,s.test(n)){var z=s.exec(n);i=z[1],s=d,u=f,a=k,(s.test(i)||u.test(i)&&!a.test(i))&&(n=i)}return s=P,u=d,s.test(n)&&u.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return z}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==!0?e:void 0},t.clearStopWords=function(){t.stopWordFilter.stopWords={}},t.addStopWords=function(e){null!=e&&Array.isArray(e)!==!1&&e.forEach(function(e){t.stopWordFilter.stopWords[e]=!0},this)},t.resetStopWords=function(){t.stopWordFilter.stopWords=t.defaultStopWords},t.defaultStopWords={"":!0,a:!0,able:!0,about:!0,across:!0,after:!0,all:!0,almost:!0,also:!0,am:!0,among:!0,an:!0,and:!0,any:!0,are:!0,as:!0,at:!0,be:!0,because:!0,been:!0,but:!0,by:!0,can:!0,cannot:!0,could:!0,dear:!0,did:!0,"do":!0,does:!0,either:!0,"else":!0,ever:!0,every:!0,"for":!0,from:!0,get:!0,got:!0,had:!0,has:!0,have:!0,he:!0,her:!0,hers:!0,him:!0,his:!0,how:!0,however:!0,i:!0,"if":!0,"in":!0,into:!0,is:!0,it:!0,its:!0,just:!0,least:!0,let:!0,like:!0,likely:!0,may:!0,me:!0,might:!0,most:!0,must:!0,my:!0,neither:!0,no:!0,nor:!0,not:!0,of:!0,off:!0,often:!0,on:!0,only:!0,or:!0,other:!0,our:!0,own:!0,rather:!0,said:!0,say:!0,says:!0,she:!0,should:!0,since:!0,so:!0,some:!0,than:!0,that:!0,the:!0,their:!0,them:!0,then:!0,there:!0,these:!0,they:!0,"this":!0,tis:!0,to:!0,too:!0,twas:!0,us:!0,wants:!0,was:!0,we:!0,were:!0,what:!0,when:!0,where:!0,which:!0,"while":!0,who:!0,whom:!0,why:!0,will:!0,"with":!0,would:!0,yet:!0,you:!0,your:!0},t.stopWordFilter.stopWords=t.defaultStopWords,t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(e){if(null===e||void 0===e)throw new Error("token should not be undefined");return e.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.InvertedIndex=function(){this.root={docs:{},df:0}},t.InvertedIndex.load=function(e){var t=new this;return t.root=e.root,t},t.InvertedIndex.prototype.addToken=function(e,t,n){for(var n=n||this.root,i=0;i<=e.length-1;){var o=e[i];o in n||(n[o]={docs:{},df:0}),i+=1,n=n[o]}var r=t.ref;n.docs[r]?n.docs[r]={tf:t.tf}:(n.docs[r]={tf:t.tf},n.df+=1)},t.InvertedIndex.prototype.hasToken=function(e){if(!e)return!1;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return!1;t=t[e[n]]}return!0},t.InvertedIndex.prototype.getNode=function(e){if(!e)return null;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return null;t=t[e[n]]}return t},t.InvertedIndex.prototype.getDocs=function(e){var t=this.getNode(e);return null==t?{}:t.docs},t.InvertedIndex.prototype.getTermFrequency=function(e,t){var n=this.getNode(e);return null==n?0:t in n.docs?n.docs[t].tf:0},t.InvertedIndex.prototype.getDocFreq=function(e){var t=this.getNode(e);return null==t?0:t.df},t.InvertedIndex.prototype.removeToken=function(e,t){if(e){var n=this.getNode(e);null!=n&&t in n.docs&&(delete n.docs[t],n.df-=1)}},t.InvertedIndex.prototype.expandToken=function(e,t,n){if(null==e||""==e)return[];var t=t||[];if(void 0==n&&(n=this.getNode(e),null==n))return t;n.df>0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e<arguments.length;e++)t=arguments[e],~this.indexOf(t)||this.elements.splice(this.locationFor(t),0,t);this.length=this.elements.length},lunr.SortedSet.prototype.toArray=function(){return this.elements.slice()},lunr.SortedSet.prototype.map=function(e,t){return this.elements.map(e,t)},lunr.SortedSet.prototype.forEach=function(e,t){return this.elements.forEach(e,t)},lunr.SortedSet.prototype.indexOf=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]<u[i]?n++:s[n]>u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o<r.length;o++)i.add(r[o]);return i},lunr.SortedSet.prototype.toJSON=function(){return this.toArray()},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.elasticlunr=t()}(this,function(){return t})}();
    /** pdoc search index */const docs = [{"fullname": "pricegenerator", "modulename": "pricegenerator", "kind": "module", "doc": "<p></p>\n"}, {"fullname": "pricegenerator.PriceGenerator", "modulename": "pricegenerator.PriceGenerator", "kind": "module", "doc": "<p><strong>PriceGenerator</strong> is the platform for generating prices similar to real stock prices, but you can control the statistics of their distribution. Generates chain of candlesticks with predefined statistical parameters, return Pandas DataFrame or saving as .CSV-file with OHLCV-candlestick in every string. Use PriceGenerator to generate synthetic data to test your trading strategy.</p>\n\n<p>In additional you can view some statistical and probability parameters of generated or loaded prices.</p>\n\n<p>Sample example:</p>\n\n<p><a href=\"https://github.com/Tim55667757/PriceGenerator\"><img src=\"https://github.com/Tim55667757/PriceGenerator/blob/master/media/index_google.html.png?raw=true\" alt=\"Chart\" width=\"780\" target=\"_blank\" /></a></p>\n\n<p><a href=\"https://yoomoney.ru/fundraise/BxB9DQNvJnk.230111\"><img src=\"https://badgen.net/badge/gift/donate/green\" alt=\"gift\" /></a></p>\n"}, {"fullname": "pricegenerator.PriceGenerator.uLogger", "modulename": "pricegenerator.PriceGenerator", "qualname": "uLogger", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;Logger PriceGenerator-UniLogger (DEBUG)&gt;"}, {"fullname": "pricegenerator.PriceGenerator.GOOGLE_TEMPLATE_J2", "modulename": "pricegenerator.PriceGenerator", "qualname": "GOOGLE_TEMPLATE_J2", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;{# This template based on Jinja markup language: https://jinja.palletsprojects.com/en/latest/ #}\\n&lt;!DOCTYPE html&gt;\\n&lt;html&gt;\\n\\n&lt;head&gt;\\n    &lt;title&gt;{{ title }}&lt;/title&gt;\\n    &lt;meta charset=&quot;utf-8&quot;&gt;\\n    &lt;script type=&quot;text/javascript&quot; src=&quot;https://code.jquery.com/jquery-latest.min.js&quot;&gt;&lt;/script&gt;\\n    &lt;script type=&quot;text/javascript&quot; src=&quot;https://www.gstatic.com/charts/loader.js&quot;&gt;&lt;/script&gt;\\n    &lt;script type=&quot;text/javascript&quot;&gt;google.charts.load(\\&#x27;current\\&#x27;, {\\&#x27;packages\\&#x27;: [\\&#x27;corechart\\&#x27;]});&lt;/script&gt;\\n    &lt;style type=&quot;text/css&quot;&gt;\\n    #preloader {\\n        position: fixed;\\n        top: 0;\\n        left: 0;\\n        right: 0;\\n        bottom: 0;\\n        background-color: #FFFFFF;\\n        z-index: 99;\\n    }\\n    #status {\\n        width: 300px;\\n        height: 150px;\\n        position: absolute;\\n        left: 50%;\\n        top: 50%;\\n        background-image: url(https://raw.githubusercontent.com/niklausgerber/PreLoadMe/master/img/status.gif);\\n        background-repeat: no-repeat;\\n        background-position: left;\\n        margin: -100px 0 0 -100px;\\n        font-family: &quot;Segoe UI&quot;, &quot;Frutiger&quot;, &quot;Frutiger Linotype&quot;, &quot;Dejavu Sans&quot;, &quot;Helvetica Neue&quot;, &quot;Arial&quot;, sans-serif;\\n        font-size: 14px;\\n    }\\n    pre {\\n        font-family: &quot;Lucida Console&quot;, sans-serif;\\n        font-size: 11px;\\n        padding: 0;\\n        border-width: 0 0 0 0;\\n    }\\n    table {\\n        font-family: &quot;Segoe UI&quot;, &quot;Frutiger&quot;, &quot;Frutiger Linotype&quot;, &quot;Dejavu Sans&quot;, &quot;Helvetica Neue&quot;, &quot;Arial&quot;, sans-serif;\\n        font-size: 12px;\\n        border-spacing: 0;\\n        text-align: left;\\n        background: white;\\n        width: 100%;\\n    }\\n    th {\\n        border-radius: 10px 10px 10px 10px;\\n        border-style: solid;\\n        border-width: 0 1px 1px 0;\\n        border-color: white;\\n        padding: 6px;\\n        vertical-align: middle;\\n        padding-left: 1em;\\n        background: #E6E6E6;\\n        height: 50px;\\n    }\\n    td {\\n        border-radius: 10px 10px 10px 10px;\\n        border-style: solid;\\n        border-width: 0 1px 1px 0;\\n        border-color: white;\\n        padding: 6px;\\n        vertical-align: top;\\n        padding-left: 1em;\\n        background: white;\\n    }\\n    &lt;/style&gt;\\n    &lt;script&gt;\\n    function drawChartCandlesticks(candlesData) {\\n        var chartOptions = {\\n            legend: &quot;none&quot;,\\n            titlePosition: &quot;in&quot;,\\n            chartArea: {width: &quot;100%&quot;, height: &quot;100%&quot;},\\n            fontSize: 11,\\n            candlestick: {\\n                fallingColor: {stroke: &quot;#000000&quot;, strokeWidth: 1, fill: &quot;#999999&quot;},\\n                risingColor: {stroke: &quot;#000000&quot;,  strokeWidth: 1, fill: &quot;#FFFFFF&quot;},\\n            },\\n            colors: [&quot;#000000&quot;],\\n            hAxis: {textPosition: &quot;none&quot;},\\n            vAxis: {textPosition: &quot;in&quot;, textStyle: {fontSize: 12}},\\n        }\\n        if (typeof candlesData !== &quot;undefined&quot;) {\\n            var data = google.visualization.arrayToDataTable(candlesData, true);\\n            var chart = new google.visualization.CandlestickChart(document.getElementById(&quot;candlestickChart&quot;));\\n            chart.draw(data, chartOptions);\\n        }\\n    }\\n    &lt;/script&gt;\\n&lt;/head&gt;\\n\\n\\n&lt;body onload=&quot;drawChartCandlesticks({{ candlesData }})&quot;&gt;\\n\\n\\n&lt;!-- Preloader --&gt;\\n&lt;script&gt;\\n    $(window).on(\\&#x27;load\\&#x27;, function() {\\n        $(\\&#x27;#status\\&#x27;).fadeOut(\\&#x27;slow\\&#x27;);\\n        $(\\&#x27;#preloader\\&#x27;).fadeOut(\\&#x27;slow\\&#x27;);\\n    })\\n&lt;/script&gt;\\n&lt;div id=&quot;preloader&quot;&gt;\\n    &lt;div id=&quot;status&quot;&gt;Wait...&lt;/div&gt;\\n&lt;/div&gt;\\n\\n\\n&lt;!-- Chart part --&gt;\\n\\n&lt;table id=&quot;chart&quot;&gt;\\n    &lt;tr&gt;\\n        &lt;th style=&quot;width: 80%;&quot;&gt;\\n            &lt;b&gt;{{ title }}&lt;/b&gt;\\n        &lt;/th&gt;\\n        &lt;th&gt;\\n            &lt;b&gt;Info&lt;/b&gt;\\n        &lt;/th&gt;\\n    &lt;/tr&gt;\\n    &lt;tr&gt;\\n        &lt;td&gt;\\n            &lt;div id=&quot;candlestickChart&quot; style=&quot;height: 800px; width: 100%;&quot;&gt;&lt;/div&gt;\\n        &lt;/td&gt;\\n        &lt;td&gt;\\n            {% for line in info %}\\n                &lt;pre&gt;{{ line }}&lt;/pre&gt;\\n            {% endfor %}\\n        &lt;/td&gt;\\n    &lt;/tr&gt;\\n&lt;/table&gt;\\n\\n\\n&lt;!-- Footer --&gt;\\n\\n&lt;table&gt;\\n    &lt;tr&gt;\\n        &lt;th&gt;&lt;b&gt;Generated by &lt;a href=&quot;https://github.com/Tim55667757/PriceGenerator&quot;&gt;PriceGenerator&lt;/a&gt;&lt;/b&gt;&lt;/th&gt;\\n    &lt;/tr&gt;\\n&lt;/table&gt;\\n\\n\\n&lt;/body&gt;\\n\\n&lt;/html&gt;\\n&#x27;"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator", "kind": "class", "doc": "<p>This class implements methods to generation of prices statistically similar to real ones.</p>\n\n<p><strong>Model generated: OHLCV-candlesticks (open, high, low, close, volume).</strong></p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.__init__", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.__init__", "kind": "function", "doc": "<p>Main class init.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">()</span>"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.prices", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.prices", "kind": "variable", "doc": "<p>Generated or loaded prices will be available in this Pandas DataFrame variable.</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.csvHeaders", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.csvHeaders", "kind": "variable", "doc": "<p>Headers in .CSV-file. Default: <code>[\"date\", \"time\", \"open\", \"high\", \"low\", \"close\", \"volume\"]</code>.</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.dfHeaders", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.dfHeaders", "kind": "variable", "doc": "<p>Headers in Pandas DataFrame. Default: <code>[\"datetime\", \"open\", \"high\", \"low\", \"close\", \"volume\"]</code>.</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.sep", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.sep", "kind": "variable", "doc": "<p>Separator in csv - file. Default: <code>,</code></p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.j2template", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.j2template", "kind": "variable", "doc": "<p>Full path to custom jinja2 html-template file (e.g. <code>google_template_example.j2</code>) or just set here a long multi-string variable. Default: <code>GOOGLE_TEMPLATE_J2</code> is a multi-string variable with internal template.</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.j2model", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.j2model", "kind": "variable", "doc": "<p>Dictionary of variables for jinja2 template. If <code>None</code> then used default variables for internal <code>GOOGLE_TEMPLATE_J2</code></p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.ticker", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.ticker", "kind": "variable", "doc": "<p>Some fake ticker name. Default: <code>Test</code>.</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.timeframe", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.timeframe", "kind": "variable", "doc": "<p>Time delta between two neighbour candles. Default: <code>timedelta(hours=1)</code>.</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.timeStart", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.timeStart", "kind": "variable", "doc": "<p>First date and time for candles chain.</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.horizon", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.horizon", "kind": "variable", "doc": "<p>Candlesticks count in generated or loaded chain of prices, must be &gt;= 5. Default: <code>None</code> (means auto-detect length of chain if loaded from file).</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.trendSplit", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.trendSplit", "kind": "variable", "doc": "<p>Set different trends, e.g. <code>trendSplit=\"/\\-\"</code> means that generated candles has uptrend at first part, next downtrend and then no trend. Used only together with <code>splitCount</code> variable. Also, you can use words: <code>up</code>, <code>down</code>, <code>no</code> or chars: <code>u</code>, <code>d</code>, <code>n</code> with the hyphen symbol as separator, e.g. <code>trendSplit=up-down-no-up</code>, <code>trendSplit=u-d-n-u</code> etc. Default: <code>\"\"</code>, empty string mean that will be used random trend directions.</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.splitCount", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.splitCount", "kind": "variable", "doc": "<p>Set candles count in different trends, e.g. <code>splitCount=[5, 10, 15]</code> means that generated candles has 3 trends with 5, 10 and 15 candles in chain, with sum must be equal to horizon. Used only together with <code>trendSplit</code> variable. Default: <code>[]</code>, empty list mean that will be used random candles count in trends.</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.maxClose", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.maxClose", "kind": "variable", "doc": "<p>Maximum of close prices must be &gt;= <code>minClose</code>. Default: random in interval <code>(70, 90)</code>.</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.minClose", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.minClose", "kind": "variable", "doc": "<p>Minimum of close prices must be &lt;= <code>maxClose</code>. Default: random in interval <code>(60, 70)</code>.</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.initClose", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.initClose", "kind": "variable", "doc": "<p>First candle close price value. If <code>None</code> then used random number in interval between <code>minClose</code> and <code>maxClose</code>. Default: <code>None</code>.</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.maxOutlier", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.maxOutlier", "kind": "variable", "doc": "<p>Maximum size of outliers. If <code>None</code> then used value <code>(maxClose - minClose) / 10</code>. Default: <code>None</code>.</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.maxCandleBody", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.maxCandleBody", "kind": "variable", "doc": "<p>Maximum of candle body sizes: <code>abs(open - close)</code>. If <code>None</code> then used value <code>maxOutlier * 90%</code>. Default: <code>None</code>.</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.upCandlesProb", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.upCandlesProb", "kind": "variable", "doc": "<p>Probability that next candle is up. Default: <code>0.5</code> (means 50% of probability).</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.outliersProb", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.outliersProb", "kind": "variable", "doc": "<p>Outlier probability (price tails). Default: <code>0.03</code> (means 3% of probability).</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.trendDeviation", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.trendDeviation", "kind": "variable", "doc": "<p>Relative deviation for trend detection. \"NO trend\" if <code>(1st_close - last_close) / 1st_close &lt;= self.trendDeviation</code>. Default: <code>0.005</code> (means \u00b10.5% of price deviation).</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.maxVolume", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.maxVolume", "kind": "variable", "doc": "<p>Maximum of generated trade volumes. Default: random in interval <code>[1, 100000]</code>.</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.stat", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.stat", "kind": "variable", "doc": "<p>Some statistics available after candles loaded or generated.</p>\n", "annotation": ": dict"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.precision", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.precision", "kind": "variable", "doc": "<p>Signs after comma.</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.zigZagDeviation", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.zigZagDeviation", "kind": "variable", "doc": "<p>Relative deviation to detection next points used by Zig-Zag indicator. Default: 0.03 (means 3% of price deviation).</p>\n"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.FormattedDelta", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.FormattedDelta", "kind": "function", "doc": "<p>Pretty format for timedelta objects.</p>\n\n<p>Example: <code>FormattedDelta(timedelta(days=2, hours=3, minutes=15, seconds=35), \"{days} days {hours}:{minutes}:{seconds}\") -&gt; \"2 days 3:15:35\"</code>.</p>\n\n<h6 id=\"returns\">Returns</h6>\n\n<blockquote>\n  <p>timedelta object formatted as a string.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">tDelta</span><span class=\"p\">:</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span>, </span><span class=\"param\"><span class=\"n\">fmt</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">str</span>:</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.DetectPrecision", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.DetectPrecision", "kind": "function", "doc": "<p>Auto-detect precision from example values. E.g. <code>0.123 -&gt; 3</code>, <code>0.12345 -&gt; 5</code> and so on.\nThis method change <code>precision</code> variable after detect precision.</p>\n\n<p>See also about statistics.mode: <a href=\"https://docs.python.org/3.9/library/statistics.html#statistics.mode\">https://docs.python.org/3.9/library/statistics.html#statistics.mode</a>\nChanged in Python version &gt;= 3.8: Now mode() method handles multimodal datasets by returning the first mode encountered.\nPreviously, it raised StatisticsError when more than one mode was found.</p>\n\n<h6 id=\"parameters\">Parameters</h6>\n\n<ul>\n<li><strong>examples</strong>:  chain with examples of float values.</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">self</span>,</span><span class=\"param\">\t<span class=\"n\">examples</span><span class=\"p\">:</span> <span class=\"n\">Union</span><span class=\"p\">[</span><span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ndarray</span><span class=\"p\">,</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">series</span><span class=\"o\">.</span><span class=\"n\">Series</span><span class=\"p\">,</span> <span class=\"nb\">list</span><span class=\"p\">]</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">int</span>:</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.DetectTimeframe", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.DetectTimeframe", "kind": "function", "doc": "<p>Auto-detect time delta between last two neighbour candles.</p>\n\n<h6 id=\"returns\">Returns</h6>\n\n<blockquote>\n  <p>timedelta object, also saved to <code>timeframe</code>.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span>:</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.LoadFromFile", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.LoadFromFile", "kind": "function", "doc": "<p>Create Pandas OHLCV-model from CSV-file.\nDefault columns in CSV-file are <code>[\"date\", \"time\", \"open\", \"high\", \"low\", \"close\", \"volume\"]</code>.</p>\n\n<h6 id=\"parameters\">Parameters</h6>\n\n<ul>\n<li><strong>fileName</strong>:  path to CSV-file with OHLCV columns.</li>\n</ul>\n\n<h6 id=\"returns\">Returns</h6>\n\n<blockquote>\n  <p>Pandas DataFrame.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">fileName</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>:</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.SaveToFile", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.SaveToFile", "kind": "function", "doc": "<p>Save Pandas OHLCV model to CSV-file.</p>\n\n<h6 id=\"parameters\">Parameters</h6>\n\n<ul>\n<li><strong>fileName</strong>:  path to CSV-file.</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">fileName</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.GetTrend", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.GetTrend", "kind": "function", "doc": "<p>Get string with trend: <code>\"UP trend\"</code>, <code>\"DOWN trend\"</code> or <code>\"NO trend\"</code>.</p>\n\n<h6 id=\"parameters\">Parameters</h6>\n\n<ul>\n<li><strong>firstClose</strong>:  close of first candle.</li>\n<li><strong>lastClose</strong>:  close of last candle.</li>\n<li><strong>trendDeviation</strong>:  relative deviation for trend detection, 0.005 mean \u00b10.5% by default.</li>\n</ul>\n\n<h6 id=\"returns\">Returns</h6>\n\n<blockquote>\n  <p>string with trend direction <code>\"NO trend\"</code>, <code>\"UP trend\"</code> or <code>\"DOWN trend\"</code>.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">firstClose</span><span class=\"p\">:</span> <span class=\"nb\">float</span>,</span><span class=\"param\">\t<span class=\"n\">lastClose</span><span class=\"p\">:</span> <span class=\"nb\">float</span>,</span><span class=\"param\">\t<span class=\"n\">trendDeviation</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">0.005</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">str</span>:</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.ZigZagFilter", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.ZigZagFilter", "kind": "function", "doc": "<p>This method filter input data as Zig-Zag indicator: when input value of candlestick price (e.g. close price)\nis difference with next values with define percent then this point is a point of Zig-Zag indicator.</p>\n\n<h6 id=\"parameters\">Parameters</h6>\n\n<ul>\n<li><strong>datetimes</strong>:  input Pandas Series with datetime values.</li>\n<li><strong>values</strong>:  input Pandas Series or list, e.g. list of closes values of candlesticks.</li>\n<li><strong>deviation</strong>:  float number in <code>[0, 1]</code> interval is a relative difference between <code>i</code> and <code>i + 1</code> values to set as Zig-Zag point.</li>\n</ul>\n\n<h6 id=\"returns\">Returns</h6>\n\n<blockquote>\n  <p>Pandas DataFrame with two Series of filtered data <code>\"datetimes\": filtered_datetimes</code> and <code>\"filtered\": filtered_values</code>.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">datetimes</span><span class=\"p\">:</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">series</span><span class=\"o\">.</span><span class=\"n\">Series</span>,</span><span class=\"param\">\t<span class=\"n\">values</span><span class=\"p\">:</span> <span class=\"n\">Union</span><span class=\"p\">[</span><span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">series</span><span class=\"o\">.</span><span class=\"n\">Series</span><span class=\"p\">,</span> <span class=\"nb\">list</span><span class=\"p\">]</span>,</span><span class=\"param\">\t<span class=\"n\">deviation</span><span class=\"p\">:</span> <span class=\"nb\">float</span></span><span class=\"return-annotation\">) -> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>:</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.GetStatistics", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.GetStatistics", "kind": "function", "doc": "<p>Calculates statistics of candles chain.</p>\n\n<h6 id=\"returns\">Returns</h6>\n\n<blockquote>\n  <p>list with text in Markdown format with statistics.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span>:</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.Generate", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.Generate", "kind": "function", "doc": "<p>Main method to generating prices.</p>\n\n<p>:return Pandas DataFrame object with OHLCV-candlestick in every row and also saving it to the <code>prices</code>.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span></span><span class=\"return-annotation\">) -> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>:</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.RenderBokeh", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.RenderBokeh", "kind": "function", "doc": "<p>Rendering prices from Pandas DataFrame as OHLCV Bokeh chart of candlesticks and save it to HTML-file.\nPandas DataFrame in <code>prices</code> variable must contain \"datetime\", \"open\", \"high\", \"low\", \"close\" and \"volume\" columns.</p>\n\n<p>See also: <a href=\"https://docs.bokeh.org/en/latest/docs/gallery/candlestick.html\">https://docs.bokeh.org/en/latest/docs/gallery/candlestick.html</a></p>\n\n<h6 id=\"parameters\">Parameters</h6>\n\n<ul>\n<li><strong>fileName</strong>:  HTML-file path to save Bokeh chart. <code>index.html</code> by default.</li>\n<li><strong>viewInBrowser</strong>:  If <code>True</code>, then immediately opens HTML chart in browser after rendering. <code>False</code> by default.</li>\n<li><strong>darkTheme</strong>:  chart theme. <code>False</code> by default, mean that will be used light theme, <code>False</code> mean dark theme.</li>\n<li><strong>markers</strong>:  Pandas DataFrame with additional markers that will be placed on main series. <code>None</code> by default.\nMarker is a custom symbol, example: \u00d7, \u2193 or \u2191. Dataframe with markers must contain at least two columns.\nThere are <code>datetime</code> with date and time and some markers columns (<code>markersUpper</code>, <code>markersCenter</code> or <code>markersLower</code>).\nLength of markers series must be equal to the length of main candles series.</li>\n<li><strong>lines</strong>:  list with custom series, where additional chart-lines will place on main series. <code>None</code> by default.\nLine data must contain at least two columns. There are <code>datetime</code> with date and time and\n<code>custom_line_name</code> with y-coordinates. Length of the chart-line dataframes must be equal to the length of main candle series.</li>\n<li><strong>title</strong>:  specific chart title. If <code>None</code>, then used auto-generated title. <code>None</code> by default.</li>\n<li><strong>width</strong>:  chart width. If <code>None</code>, then used auto-width. 1800 px by default.</li>\n<li><strong>height</strong>:  chart height. If <code>None</code>, then used auto-height. 940 px by default.</li>\n<li><strong>showControlsOnChart</strong>:  enable controls block in legend to hide/show some elements on chart, <code>True</code> by default.</li>\n<li><strong>showStatOnChart</strong>:  show statistics block on chart, <code>True</code> (by default) mean that will be calculating additional\nseries, like as Trend and Average Points. And some classical indicators, like as SMA, HMA,\nVWMA, Bollinger Bands, Parabolic Stop and Reverse, Alligator and Zig-Zag indicator.\nWarning! Calculate statistic takes more time. If you want to decrease chart rendering time,\nthen set this parameter to <code>False</code>.</li>\n<li><strong>inline</strong>:  if <code>True</code>, then output chart in Jupyter Notebook cell. <code>False</code> by default.</li>\n</ul>\n\n<h6 id=\"returns\">Returns</h6>\n\n<blockquote>\n  <p>bokeh.layouts.gridplot with all layouts objects or None.</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">self</span>,</span><span class=\"param\">\t<span class=\"n\">fileName</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;index.html&#39;</span>,</span><span class=\"param\">\t<span class=\"n\">viewInBrowser</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>,</span><span class=\"param\">\t<span class=\"n\">darkTheme</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>,</span><span class=\"param\">\t<span class=\"n\">markers</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>,</span><span class=\"param\">\t<span class=\"n\">lines</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span><span class=\"p\">]]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>,</span><span class=\"param\">\t<span class=\"n\">title</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>,</span><span class=\"param\">\t<span class=\"n\">width</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">int</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">1800</span>,</span><span class=\"param\">\t<span class=\"n\">height</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">int</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">940</span>,</span><span class=\"param\">\t<span class=\"n\">showControlsOnChart</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>,</span><span class=\"param\">\t<span class=\"n\">showStatOnChart</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>,</span><span class=\"param\">\t<span class=\"n\">inline</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span></span><span class=\"return-annotation\">) -> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"n\">gridplot</span><span class=\"p\">]</span>:</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.PriceGenerator.PriceGenerator.RenderGoogle", "modulename": "pricegenerator.PriceGenerator", "qualname": "PriceGenerator.RenderGoogle", "kind": "function", "doc": "<p>Rendering prices from Pandas DataFrame as non-interactive Google Candlestick chart and save it to HTML-file.</p>\n\n<p>See also: <a href=\"https://developers.google.com/chart/interactive/docs/gallery/candlestickchart\">https://developers.google.com/chart/interactive/docs/gallery/candlestickchart</a></p>\n\n<h6 id=\"parameters\">Parameters</h6>\n\n<ul>\n<li><strong>fileName</strong>:  HTML-file path to save Google Candlestick chart.</li>\n<li><strong>viewInBrowser</strong>:  If <code>True</code>, then immediately opens html in browser after rendering.</li>\n<li><strong>title</strong>:  specific chart title. If <code>None</code>, then used auto-generated title. <code>None</code> by default.</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">self</span>,</span><span class=\"param\">\t<span class=\"n\">fileName</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;index.html&#39;</span>,</span><span class=\"param\">\t<span class=\"n\">viewInBrowser</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>,</span><span class=\"param\">\t<span class=\"n\">title</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span></span><span class=\"return-annotation\">) -> <span class=\"kc\">None</span>:</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.PriceGenerator.ParseArgs", "modulename": "pricegenerator.PriceGenerator", "qualname": "ParseArgs", "kind": "function", "doc": "<p>This function get and parse command line keys.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.PriceGenerator.Main", "modulename": "pricegenerator.PriceGenerator", "qualname": "Main", "kind": "function", "doc": "<p>Main function for work with PriceGenerator in the console.</p>\n\n<p>See examples:</p>\n\n<ul>\n<li>in english: <a href=\"https://github.com/Tim55667757/PriceGenerator/blob/master/README.md\">https://github.com/Tim55667757/PriceGenerator/blob/master/README.md</a></li>\n<li>in russian: <a href=\"https://github.com/Tim55667757/PriceGenerator/blob/master/README_RU.md\">https://github.com/Tim55667757/PriceGenerator/blob/master/README_RU.md</a></li>\n</ul>\n\n<p><a href=\"https://yoomoney.ru/fundraise/BxB9DQNvJnk.230111\"><img src=\"https://badgen.net/badge/gift/donate/green\" alt=\"gift\" /></a></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.UniLogger", "modulename": "pricegenerator.UniLogger", "kind": "module", "doc": "<p>This module init standard python logging system with some of pre-defined parameters,\ne.g. debug level for log-file, info level for console, log-rotate and so on.</p>\n\n<p>Current internal logger name for PriceGenerator module is <code>PriceGenerator-UniLogger</code>.</p>\n"}, {"fullname": "pricegenerator.UniLogger.UniLogger", "modulename": "pricegenerator.UniLogger", "qualname": "UniLogger", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;Logger PriceGenerator-UniLogger (DEBUG)&gt;"}, {"fullname": "pricegenerator.UniLogger.formatString", "modulename": "pricegenerator.UniLogger", "qualname": "formatString", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;%(filename)-20sL:%(lineno)-5d%(levelname)-8s[%(asctime)s] %(message)s&#x27;"}, {"fullname": "pricegenerator.UniLogger.formatter", "modulename": "pricegenerator.UniLogger", "qualname": "formatter", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;logging.Formatter object&gt;"}, {"fullname": "pricegenerator.UniLogger.SetLevel", "modulename": "pricegenerator.UniLogger", "qualname": "SetLevel", "kind": "function", "doc": "<p>This procedure setting up UniLogger verbosity level.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">vLevel</span><span class=\"o\">=</span><span class=\"s1\">&#39;ERROR&#39;</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.UniLogger.LevelFilter", "modulename": "pricegenerator.UniLogger", "qualname": "LevelFilter", "kind": "class", "doc": "<p>Class using to set up log level filtering.</p>\n", "bases": "logging.Filter"}, {"fullname": "pricegenerator.UniLogger.LevelFilter.__init__", "modulename": "pricegenerator.UniLogger", "qualname": "LevelFilter.__init__", "kind": "function", "doc": "<p>Initialize a filter.</p>\n\n<p>Initialize with the name of the logger which, together with its\nchildren, will have its events allowed through the filter. If no\nname is specified, allow every event.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">level</span></span>)</span>"}, {"fullname": "pricegenerator.UniLogger.LevelFilter.level", "modulename": "pricegenerator.UniLogger", "qualname": "LevelFilter.level", "kind": "variable", "doc": "<p></p>\n"}, {"fullname": "pricegenerator.UniLogger.LevelFilter.filter", "modulename": "pricegenerator.UniLogger", "qualname": "LevelFilter.filter", "kind": "function", "doc": "<p>Determine if the specified record is to be logged.</p>\n\n<p>Returns True if the record should be logged, or False otherwise.\nIf deemed appropriate, the record may be modified in-place.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">record</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.UniLogger.EnableLogger", "modulename": "pricegenerator.UniLogger", "qualname": "EnableLogger", "kind": "function", "doc": "<p>Adding new file logger with rotation.</p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">logFile</span>,</span><span class=\"param\">\t<span class=\"n\">parentHandler</span><span class=\"o\">=&lt;</span><span class=\"n\">Logger</span> <span class=\"n\">PriceGenerator</span><span class=\"o\">-</span><span class=\"n\">UniLogger</span> <span class=\"p\">(</span><span class=\"n\">DEBUG</span><span class=\"p\">)</span><span class=\"o\">&gt;</span>,</span><span class=\"param\">\t<span class=\"n\">useFormat</span><span class=\"o\">=&lt;</span><span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">Formatter</span> <span class=\"nb\">object</span><span class=\"o\">&gt;</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.UniLogger.DisableLogger", "modulename": "pricegenerator.UniLogger", "qualname": "DisableLogger", "kind": "function", "doc": "<p>Disable given file logger.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">handler</span>, </span><span class=\"param\"><span class=\"n\">parentHandler</span><span class=\"o\">=&lt;</span><span class=\"n\">Logger</span> <span class=\"n\">PriceGenerator</span><span class=\"o\">-</span><span class=\"n\">UniLogger</span> <span class=\"p\">(</span><span class=\"n\">DEBUG</span><span class=\"p\">)</span><span class=\"o\">&gt;</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, {"fullname": "pricegenerator.UniLogger.streamHandler", "modulename": "pricegenerator.UniLogger", "qualname": "streamHandler", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;StreamHandler (INFO)&gt;"}, {"fullname": "pricegenerator.UniLogger.sepWide", "modulename": "pricegenerator.UniLogger", "qualname": "sepWide", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;------------------------------------------------------------------------------------------------------------------------&#x27;"}, {"fullname": "pricegenerator.UniLogger.sepLong", "modulename": "pricegenerator.UniLogger", "qualname": "sepLong", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;--------------------------------------------------------------------------------&#x27;"}, {"fullname": "pricegenerator.UniLogger.sepShort", "modulename": "pricegenerator.UniLogger", "qualname": "sepShort", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;----------------------------------------&#x27;"}, {"fullname": "pricegenerator.UniLogger.sepLine", "modulename": "pricegenerator.UniLogger", "qualname": "sepLine", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;=--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--=&#x27;"}];

    // mirrored in build-search-index.js (part 1)
    // Also split on html tags. this is a cheap heuristic, but good enough.
    elasticlunr.tokenizer.setSeperator(/[\s\-.;&_'"=,()]+|<[^>]*>/);

    let searchIndex;
    if (docs._isPrebuiltIndex) {
        console.info("using precompiled search index");
        searchIndex = elasticlunr.Index.load(docs);
    } else {
        console.time("building search index");
        // mirrored in build-search-index.js (part 2)
        searchIndex = elasticlunr(function () {
            this.pipeline.remove(elasticlunr.stemmer);
            this.pipeline.remove(elasticlunr.stopWordFilter);
            this.addField("qualname");
            this.addField("fullname");
            this.addField("annotation");
            this.addField("default_value");
            this.addField("signature");
            this.addField("bases");
            this.addField("doc");
            this.setRef("fullname");
        });
        for (let doc of docs) {
            searchIndex.addDoc(doc);
        }
        console.timeEnd("building search index");
    }

    return (term) => searchIndex.search(term, {
        fields: {
            qualname: {boost: 4},
            fullname: {boost: 2},
            annotation: {boost: 2},
            default_value: {boost: 2},
            signature: {boost: 2},
            bases: {boost: 2},
            doc: {boost: 1},
        },
        expand: true
    });
})();